package yifeng.dynamicproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Hello h = new HelloImpl();
		InvocationHandler ih = new HelloHandler(h);
		
		
		Hello helloProxy = (Hello) Proxy.newProxyInstance(h.getClass().getClassLoader()
				, h.getClass().getInterfaces(), ih);
		
		helloProxy.sayHello();
		helloProxy.sayHello2();
		
		Hello helloProxy2 = (Hello) Proxy.newProxyInstance(h.getClass().getClassLoader()
				, h.getClass().getInterfaces(), ih);
		
		System.out.println(h.getClass());
		System.out.println(helloProxy.getClass());
		System.out.println(helloProxy2.getClass());
		
		Method[] methods = helloProxy.getClass().getDeclaredMethods();
		
		System.out.println();
		for(Method method : methods){
			System.out.println(method.getName());
		}
	}

}
